home *** CD-ROM | disk | FTP | other *** search
/ Delphi Magazine Collection 2001 / Delphi Magazine Collection 20001 (2001).iso / DISKS / Issue50 / Except / TestHVHookDLLUnit1.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1999-09-04  |  2.0 KB  |  85 lines

  1. unit TestHVHookDLLUnit1;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  7.   StdCtrls;
  8.  
  9. type
  10.   TForm1 = class(TForm)
  11.     HookBtn: TButton;
  12.     UnhookBtn: TButton;
  13.     Edit1: TEdit;
  14.     Edit2: TEdit;
  15.     Label1: TLabel;
  16.     Label2: TLabel;
  17.     Memo1: TMemo;
  18.     BeepBtn: TButton;
  19.     procedure HookBtnClick(Sender: TObject);
  20.     procedure UnhookBtnClick(Sender: TObject);
  21.     procedure BeepBtnClick(Sender: TObject);
  22.     procedure FormDestroy(Sender: TObject);
  23.   end;
  24.  
  25. var
  26.   Form1: TForm1;
  27.  
  28. implementation
  29.  
  30. {$R *.DFM}
  31.  
  32. uses
  33.   HVHookDLL;
  34.  
  35. { This generic hook routine can hook any function in any DLL,
  36.   no matter what parameters it takes.
  37. var
  38.   ActualDLLProc : function: DWORD;
  39. procedure GenericHookProc;
  40. begin
  41.   // do your stuff here
  42.   asm
  43.     JMP ActualDLLProc
  44.   end;
  45. end; }
  46.  
  47. var
  48.   Windows_MessageBeep : function (uType: UINT): BOOL; stdcall;
  49.  
  50. function HookedMessageBeep(uType: UINT): BOOL; stdcall;
  51. const BoolStr : array[false..true] of string = ('False', 'True');
  52. begin
  53.   if Assigned(Form1) then
  54.     Form1.Memo1.Lines.Add(Format('Called, MessageBeep(uType=%.8x)', [uType]));
  55.   Result := Windows_MessageBeep(uType);
  56.   if Assigned(Form1) then
  57.     Form1.Memo1.Lines.Add(Format('Returned, MessageBeep.Result=%s', [BoolStr[Result]]));
  58. end;
  59.  
  60. procedure TForm1.HookBtnClick(Sender: TObject);
  61. begin
  62.   if HookImport('User32.dll', 'MessageBeep', @HookedMessageBeep, @Windows_MessageBeep)
  63.   then Memo1.Lines.Add('Hooked MessageBeep')
  64.   else Memo1.Lines.Add('Hooking failed...');
  65. end;
  66.  
  67. procedure TForm1.UnhookBtnClick(Sender: TObject);
  68. begin
  69.   if UnHookImport('User32.dll', 'MessageBeep', @HookedMessageBeep, @Windows_MessageBeep)
  70.   then Memo1.Lines.Add('Unhooked MessageBeep')
  71.   else Memo1.Lines.Add('Unhooking failed...');
  72. end;
  73.  
  74. procedure TForm1.BeepBtnClick(Sender: TObject);
  75. begin
  76.   Windows.MessageBeep($FFFFFFFF);
  77. end;
  78.  
  79. procedure TForm1.FormDestroy(Sender: TObject);
  80. begin
  81.   Form1 := nil;
  82. end;
  83.  
  84. end.
  85.